package com.collections;

import com.google.common.collect.HashMultiset;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import org.junit.Test;

import java.util.Arrays;
import java.util.List;

public class MultisetDemo {


    /**
     * 不可变集合,JDK9+已内置of方法,此处只适用jdk8以下
     */
    @Test
    public void immutableList(){
        ImmutableList<Integer> list01 = ImmutableList.of(1, 2, 3);
        List<Integer> oldList= Lists.newArrayList(4,5,6);
        oldList.add(7);
        //将集合变为不可变集合
        ImmutableList<Integer> list02 = ImmutableList.copyOf(oldList);
        //builder方式
        ImmutableList.builder().addAll(list01).add(4).build().forEach(x-> System.out.println(x));
    }

    /**
     * 新类型集合: Multiset: Multiset就是可以保存多个相同的对象,并且无序
     *                      占据了List和Set之间的一个灰色地带
     *           其他实现: TreeMultiset LinkedHashMultiset
     * 　　               ConcurrentHashMultiset
     * 　　               ImmutableMultiset
     */
    @Test
    public void newList(){
        HashMultiset<Integer> multiset = HashMultiset.create();
        multiset.add(2,3);//添加指定个数的重复元素
        multiset.count(2); //获取元素在集合中的个数
        multiset.remove(2,2); //移除指定的个数元素
        multiset.setCount(5,2); //和add相同
        multiset.setCount(5,2,3); //修改集合中元素的个数,2个改为3个
        //常见功能,统计每个字符出现的此数
        String strWorld="wer|dffd|ddsa|dfd|dreg|de|dr|ce|ghrt|cf|gt|ser|tg|ghrt|cf|gt|" +
                "ser|tg|gt|kldf|dfg|vcd|fg|gt|ls|lser|dfr|wer|dffd|ddsa|dfd|dreg|de|dr|" +
                "ce|ghrt|cf|gt|ser|tg|gt|kldf|dfg|vcd|fg|gt|ls|lser|dfr";
        HashMultiset<String> multisetStr = HashMultiset.create();
        multisetStr.addAll(Arrays.asList(strWorld.split("\\|")));
        multisetStr.elementSet().forEach(x->System.out.println(x+" :"+multisetStr.count(x)));
    }

}
